﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Model;
using Util;
using RegraNegocio;

namespace ControleDePedidos
{
    public partial class Fabricante : Form
    {
        private Model.Fabricante fabricante = null;
        public Fabricante()
        {
            InitializeComponent();
            cmbAcao.SelectedIndex = 0;
            dtgResultado.AutoGenerateColumns = false;
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            fabricante = new Model.Fabricante();

            if (cmbAcao.SelectedIndex.Equals(0))
            {
                txtID.Text = "0";

                Dictionary<String, String> camposValidados = FormularioUtil.getInstance().validarCampos(this.Controls);

                if (camposValidados != null && camposValidados.Count > 0)
                {
                    foreach (var chave in camposValidados)
                    {
                        MessageBox.Show(chave.ToString().Replace(',', ':'), "Atenção");
                    }
                    return;
                }
                else
                {
                    fabricante.Nome = txtNome.Text;
                    fabricante.Cnpj = txtCNPJ.Text;
                    fabricante.Endereco = txtEndereco.Text;
                    fabricante.Bairro = txtBairro.Text;
                    fabricante.Cidade = txtCidade.Text;
                    fabricante.Uf = txtUF.Text;
                    fabricante.Tel1 = txtTel1.Text;
                    fabricante.Tel2 = txtTel2.Text;
                }

                if (FabricanteBO.getInstance().gravar(fabricante))
                {

                    MessageBox.Show(String.Format("Sucesso na inserção do Fabricante {0} ", fabricante.Nome));

                    FormularioUtil.getInstance().limparCampos(this.Controls);
                   
                    cmbAcao.SelectedIndex = 0;
                }
                else
                {
                    MessageBox.Show("Erro na inserção do Fabricante.");
                }
            }

            else if (cmbAcao.SelectedIndex.Equals(1))
            {
                if (txtID.Text.Equals("") && txtNome.Text.Equals("") && txtCNPJ.Text.Equals(""))
                {
                    MessageBox.Show("Favor preencher um dos campos para busca: Codigo / Nome / CNPJ");

                    return;
                }

                if (!txtID.Text.Equals(""))
                {
                    if (FormularioUtil.getInstance().isInteiro(txtID.Text))
                    {
                        fabricante.Codigo = int.Parse(txtID.Text);
                    }
                    else
                    {
                        MessageBox.Show("O código digitado deve ser um número inteiro!");

                        return;
                    }
                }

                if (!txtNome.Text.Equals(""))
                {
                    fabricante.Nome = txtNome.Text;
                }

                if (!txtCNPJ.Text.Equals(""))
                {
                    fabricante.Cnpj = txtCNPJ.Text;
                }

                preencheGrid(fabricante);

                cmbAcao.SelectedIndex = 1;
            }

            else if (cmbAcao.SelectedIndex.Equals(2))
            {
                Dictionary<String, String> camposValidados = FormularioUtil.getInstance().validarCampos(this.Controls);

                if (camposValidados != null && camposValidados.Count > 0)
                {
                    foreach (var chave in camposValidados)
                    {
                        MessageBox.Show(chave.ToString().Replace(',', ':'), "Atenção");
                    }
                    return;
                }
                else
                {
                    fabricante.Codigo = int.Parse(txtID.Text);
                    fabricante.Nome = txtNome.Text;
                    fabricante.Cnpj = txtCNPJ.Text;
                    fabricante.Endereco = txtEndereco.Text;
                    fabricante.Bairro = txtBairro.Text;
                    fabricante.Cidade = txtCidade.Text;
                    fabricante.Uf = txtUF.Text;
                    fabricante.Tel1 = txtTel1.Text;
                    fabricante.Tel2 = txtTel2.Text;
                }

                if (FabricanteBO.getInstance().alterar(fabricante))
                {

                    MessageBox.Show(String.Format("Sucesso na alteração do Fabricante {0} ", fabricante.Nome));

                    FormularioUtil.getInstance().limparCampos(this.Controls);

                    cmbAcao.SelectedIndex = 2;

                    preencheGrid(fabricante);
                }
                else
                {
                    MessageBox.Show("Erro na alteração do Cliente.");
                }
            }

            else if (cmbAcao.SelectedIndex.Equals(3))
            {
                if (!txtID.Text.Equals(""))
                {
                    if (FormularioUtil.getInstance().isInteiro(txtID.Text))
                    {
                        fabricante.Codigo = int.Parse(txtID.Text);

                        if (FabricanteBO.getInstance().excluir(fabricante))
                        {
                            MessageBox.Show(String.Format("Sucesso na exclusão do Fabricante {0} ", fabricante.Nome));

                            FormularioUtil.getInstance().limparCampos(this.Controls);

                            cmbAcao.SelectedIndex = 3;

                            preencheGrid(fabricante);
                        }
                        else
                        {
                            MessageBox.Show("Erro na exclusão do Fabricante.");
                        }
                    }
                    else
                    {
                        MessageBox.Show("O código digitado deve ser um número inteiro!");
                        return;
                    }
                }
            }
        }

        private void cmbAcao_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            if (cmbAcao.SelectedIndex.Equals(0))
            {
                lblID.Visible = false;
                txtID.Visible = false;
                txtID.Enabled = false;
                txtNome.Enabled = true;
                txtCNPJ.Enabled = true;
                txtEndereco.Enabled = true;
                txtBairro.Enabled = true;
                txtCidade.Enabled = true;
                txtUF.Enabled = true;
                txtTel1.Enabled = true;
                txtTel2.Enabled = true;
                btnSalvar.Text = ("Cadastrar");
            }
            else if (cmbAcao.SelectedIndex.Equals(1))
            {
                lblID.Visible = true;
                txtID.Visible = true;
                txtID.Enabled = true;
                txtNome.Enabled = true;
                txtCNPJ.Enabled = true;
                txtEndereco.Enabled = false;
                txtBairro.Enabled = false;
                txtCidade.Enabled = false;
                txtUF.Enabled = false;
                txtTel1.Enabled = false;
                txtTel2.Enabled = false;
                btnSalvar.Text = ("Consultar");
            }
            else if (cmbAcao.SelectedIndex.Equals(2))
            {
                lblID.Visible = true;
                txtID.Visible = true;
                txtID.Enabled = false;
                txtNome.Enabled = true;
                txtCNPJ.Enabled = false;
                txtEndereco.Enabled = true;
                txtBairro.Enabled = true;
                txtCidade.Enabled = true;
                txtUF.Enabled = true;
                txtTel1.Enabled = true;
                txtTel2.Enabled = true;
                btnSalvar.Text = ("Editar");
            }
            else if (cmbAcao.SelectedIndex.Equals(3))
            {
                lblID.Visible = true;
                txtID.Visible = true;
                txtID.Enabled = false;
                txtNome.Enabled = false;
                txtCNPJ.Enabled = false;
                txtEndereco.Enabled = false;
                txtBairro.Enabled = false;
                txtCidade.Enabled = false;
                txtUF.Enabled = false;
                txtTel1.Enabled = false;
                txtTel2.Enabled = false;
                btnSalvar.Text = ("Excluir");
            }
        }

        private void dtgResultado_Click(object sender, EventArgs e)
        {
            DataGridViewRow linhaAtual = dtgResultado.CurrentRow;

            fabricante = new Model.Fabricante();

            fabricante.Codigo = Int32.Parse(linhaAtual.Cells[0].Value.ToString());

            fabricante = FabricanteBO.getInstance().consulta(fabricante);

            txtID.Text = fabricante.Codigo.ToString();
            txtNome.Text = fabricante.Nome;
            txtCNPJ.Text = fabricante.Cnpj;
            txtEndereco.Text = fabricante.Endereco;
            txtBairro.Text = fabricante.Bairro;
            txtCidade.Text = fabricante.Cidade;
            txtUF.Text = fabricante.Uf;
            txtTel1.Text = fabricante.Tel1;
            txtTel2.Text = fabricante.Tel2;
        }

        private void preencheGrid(Model.Fabricante fabricante)
        {
            try
            {
                List<Model.Fabricante> fabricantesRecuperados = FabricanteBO.getInstance().recuperarFabricantes(fabricante);

                dtgResultado.DataSource = fabricantesRecuperados;
                dtgResultado.Visible = true;
            }
            catch (Exception cause)
            {
                dtgResultado.DataSource = null;
                dtgResultado.Visible = false;
                MessageBox.Show(cause.Message);
            }
        }
    }
}
